﻿using System;
using System.Collections.Generic;
using System.Linq;
using System.Web;
using System.Web.UI;
using System.Web.UI.WebControls;
using Sio.Mdm.Types.Database;
using Sio.Mdm.Entities;
using Ext.Net;

namespace Sio.Mdm.Web.Instalacija.Varnost
{
    public partial class VlogePravice : Controls.Page
    {

        #region OnLoad
        protected override void OnLoad(EventArgs e)
        {
            base.OnLoad(e);
            NaloziSeznam();
            //NaloziSeznamPravic();
        }

        protected void GridDodeljenoRefresh(object sender, StoreRefreshDataEventArgs e)
        {
            string id = e.Parameters["TipVlogeId"];
            NaloziSeznamPravic(Int32.Parse(id));
            //this.LinqDataSource2.WhereParameters["SupplierID"].DefaultValue = id ?? "-1";
            //this.StoreDodeljeno.DataBind();
        }

        [DirectMethod]
        public void EndDragDrop(object o1)
        {
            
        }

        protected void DodajPravice(object sender, DirectEventArgs e)
        {
            List<int> id = e.GetIdList<int>("selected", "PravicaId");
            int TipVlogeId = e.DeserializeParameter<int>("TipVlogeId");
            if (id.Count > 0)
            {
                foreach (var pravicaId in id)
                {
                    var vp = EntityFactory.CreateInstance<VlogaPravica>();
                    vp.PravicaId = pravicaId;
                    vp.TipVlogeId = TipVlogeId;
                    vp.Update(); 
                }
            }
        }

        protected void OdstraniPravice(object sender, DirectEventArgs e)
        {
            List<int> id = e.GetIdList<int>("selected", "PravicaId");
            int TipVlogeId = e.DeserializeParameter<int>("TipVlogeId");
            if (id.Count > 0)
            {
                EntityCollection<VlogaPravica> col = new EntityCollection<VlogaPravica>(
                    new Filter<VlogaPravica>().Where(r => r.TipVlogeId == TipVlogeId).SelectByField(r => r.PravicaId, id.ToArray())
                );
                col.RemoveAll();
                col.Update();
            }
        }
        #endregion

        #region Private
        private void NaloziSeznam()
        {
            GridSplosniSeznam.LoadData<TipVloge>(
                new Filter<TipVloge>().Where(r => r.TipVlogeId != null));
        }

        private void NaloziSeznamPravic(int tipVlogeId)
        {
            var a = String.Format(":{0}", tipVlogeId);

            GridDodeljeno.LoadData<Pravica>(
                new Filter<Pravica>().LeftJoin(new Filter<VlogaPravica>(), r => r.PravicaId.ToString() + a.ToString(), s => s.PravicaId.ToString() + ':' + s.TipVlogeId.ToString(), (r, s) => r, (j, k) => (k.PravicaId != null)));
            
            GridNeDodeljeno.LoadData<Pravica>(
                new Filter<Pravica>().LeftJoin(new Filter<VlogaPravica>(), r => r.PravicaId.ToString() + a.ToString(), s => s.PravicaId.ToString() + ':' + s.TipVlogeId.ToString(), (r, s) => r, (j, k) => (k.PravicaId == null)));
            
        }



        #endregion
    }
}
